链接:https://leetcode-cn.com/problems/palindrome-partitioning/
题目描述
给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。
返回 s 所有可能的分割方案。
示例:
1 | 输入: "aab" |
题目分析
递归结构
$r(n)=r(n-1)+w$
其中w为任选的一个长度小于当前剩余长度的子串,并且为回文串
递归边界
1 | if(n == len(s)){ |
递归参数
- s
- n
- result
- result_all
其他
其他方面还需要
- 一个回文数判断的函数
答案
按照上面的思路,也就是最基本的回溯法的思路:
1 | class Solution: |
这样大致提交结果如下:
!
可以发现空间上还是可以的,但是时间是比较慢的!
思路递进1:记忆化搜索
递归中一种最常用的剪枝的方法就是记忆化搜索,本题明显可以使用这种剪枝的方法。
整体写起来也是比较简单的,就是把所有字串是否是回文数缓存起来,这样递归的时候用起来就不用重复去判断了。
1 | class Solution: |
可以明显看到这样子执行空间消耗虽然大了不少,但是时间明显还是提升了。
!
思路递进2:动态规划
1 | class Solution: |
!